package com.jokins.admin.vue.hefeng.utils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 城市名称转换为拼音和缩写城市名称转换为拼音和缩写字母
 */
public class CityAbbreviationUtil {

    /**
     * 将城市中文名称转换为全拼和缩写字母，用逗号隔开
     *
     * @param cityName 城市中文名称
     * @return 全拼和缩写字母，格式为 "全拼,缩写"
     */
    public static String getCityPinyinAndAbbreviation(String cityName) {
        if (cityName == null || cityName.isEmpty()) {
            return "";
        }

        StringBuilder fullPinyin = new StringBuilder(); // 全拼
        StringBuilder abbreviation = new StringBuilder(); // 缩写
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE); // 拼音大写
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不带声调

        for (char c : cityName.toCharArray()) {
            if (isChineseCharacter(c)) {
                try {
                    // 获取汉字的拼音
                    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
                    if (pinyinArray != null && pinyinArray.length > 0) {
                        // 取拼音的第一个结果
                        String pinyin = pinyinArray[0];
                        fullPinyin.append(pinyin); // 拼接全拼
                        abbreviation.append(pinyin.charAt(0)); // 取首字母
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else if (Character.isLetter(c)) {
                // 如果是字母，直接转换为大写
                fullPinyin.append(Character.toUpperCase(c));
                abbreviation.append(Character.toUpperCase(c));
            }
            // 忽略其他字符（如数字、标点符号等）
        }

        // 返回全拼和缩写，用逗号隔开
        return fullPinyin.toString() + "," + abbreviation.toString();
    }

    /**
     * 判断字符是否为汉字
     *
     * @param c 字符
     * @return 是否为汉字
     */
    private static boolean isChineseCharacter(char c) {
        return String.valueOf(c).matches("[\\u4E00-\\u9FA5]");
    }

    public static void main(String[] args) {
        // 测试
        String cityName = "北京市";
        System.out.println(getCityPinyinAndAbbreviation(cityName)); // 输出: BEIJINGSHI,BJS

        cityName = "上海";
        System.out.println(getCityPinyinAndAbbreviation(cityName)); // 输出: SHANGHAI,SH
    }
}